package com.zp.self.module.level_4_算法练习.数据结构.String;

/**
 * @author By ZengPeng
 */
public class 力扣_459_重复的子字符串 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_459_重复的子字符串().repeatedSubstringPattern("abab"));
        System.out.println(new 力扣_459_重复的子字符串().repeatedSubstringPattern("aba"));
        System.out.println(new 力扣_459_重复的子字符串().repeatedSubstringPattern("abcabcabcabc"));
        System.out.println(new 力扣_459_重复的子字符串().repeatedSubstringPattern("ababab"));
    }

    /**
     * 题目：给定一个非空的字符串 s ，检查是否可以通过由它的一个子串重复多次构成。
     *
     * 示例 1:
     * 输入: s = "abab"
     * 输出: true
     * 解释: 可由子串 "ab" 重复两次构成。
     *
     * 示例 2:
     * 输入: s = "aba"
     * 输出: false
     *
     * 示例 3:
     * 输入: s = "abcabcabcabc"
     * 输出: true
     * 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
     *
     *
     * 分析:【perfect】
     *      1. 直接等分 判断相等
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public boolean repeatedSubstringPattern(String s) {
        int size =1;
        while (size<=(s.length()>>1)){
            if(s.length()% size!=0){
                size++;continue;
            }
            int i = 0;
            while (i < s.length()){
                if(i+size+size>s.length() || !s.substring(i,i+size).equals(s.substring(i+size,i+size+size)))
                     break;
                if(i+size+size == s.length())return true;
                i+=size;
            }
            size++;
        }
        return false;
    }
}